						
						; PIC 12F675 Automatic CW sender --Lazy Man's CW sender
;***********************************************************************************************************
; Rev 6 has the speed at 15 wpm and GP2,3,4 & 5 are the inputs and GP0 is the output
; This sender has four messages 1 = CQ, 2 = RST, Name & QTH, 3 = Rig and Antenna and 4 = 73's
; Author and circuit designer: Pete Juliano W6JFR, November 2004
;***************************************************************************************************************
; An internal oscillator is used. GP0 is the output (Pin 7) and the inputs are GP2,3,4 & 5.
; The inputs have a 10k resistor to +5 volts (pull up) and are momentarily to ground to initiate the message
; Memory clear is internal. GP1 is not used. The dot, dash, word timing and spacing are generated from a single delay
; loop. The output drives an on board LED (visual that it is sending) and keys a 2N3904 relay driver (reed relay).
; On Pin 7 is a 1K Ohm resistor the the LED which is connected to ground. There is also a 10K Ohm resistor from Pin 7
; from the PIC12F675 to the base of the 2N3904. The emitter is grounded and the collector is connected to one end of
; the reed realy and the other end is connected to 12 volts (a 5 volt relay would only require a single supply). There
; is a 1N914 connected across the relay coil --cathode goes to the supply and the anode to the collector. Momentary
; push button switches ( 1-4) are used to initiate the various messages. Not elegant but it works!
;*************************************************************************************************************	

			List p=12f675
			Include "p12f675.inc"
		  	__CONFIG 0X3F94				;Internal oscillator no clock out


COUNT1	EQU	0x22
COUNT2	EQU	0x23
COUNT3	EQU	0x24





		ORG	 0x000
		GOTO MAIN
		ORG	 0x004
		GOTO MAIN

;**********************DOT Generator 58.245 mSeconds *********

ONE

		MOVLW	0x21	; Dot Timing and Dot/Dash Spacing
		MOVWF	COUNT1
L1		MOVLW	0x20
		MOVWF	COUNT2
L2		MOVLW	0x11
		MOVWF	COUNT3
L3		DECFSZ	COUNT3,1
		GOTO	L3
		DECFSZ	COUNT2,1
		GOTO	L2
		DECFSZ	COUNT1,1
		GOTO	L1
		MOVLW	0x01
		MOVWF	COUNT1
LP98	DECFSZ	COUNT1,1
		GOTO	LP98
		NOP
		RETLW	0
;**********************Dash Generator / Letter Spacing************

TWO

		CALL	ONE
		CALL	ONE
		CALL	ONE
		RETURN

; ******************Extra Delay WORD SPACE************************

THREE

		CALL	TWO
		CALL	TWO

		RETURN
;*************************Dash Generator**********************
DAH
		BSF		GPIO,GP0		;     
		CALL	TWO				;	Dash
		BCF		GPIO,GP0
		CALL	ONE

		RETURN

;*************************Dot Code***********************

DI
		BSF		GPIO,GP0
		CALL	ONE				;	Dot	
		BCF		GPIO,GP0
		CALL	ONE
		RETURN

;****************BREAK*****************************************
BREAK
		CALL    DAH             ;DASH
		CALL	DI				;DOT
		CALL	DI				;DOT
		CALL	DI				;DOT
		CALL	DAH				;DASH
		CALL	TWO

		RETURN
;**********************Comma**********************************
COMMA

		CALL	DAH		;DASH --..--
		CALL	DAH		;DASH
		CALL	DI		;DOT
		CALL	DI		;DOT
		CALL	DAH		;DASH
		CALL	DAH		;DASH
		CALL	TWO

		RETURN
; *******************A******************

XXA		CALL	DI			;A .-
		CALL	DAH
		RETURN
;***********************B*****************
XXB		CALL	DAH			;B -...
		CALL	DI
		CALL	DI
		CALL	DI
		RETURN
;************************C**************************
XXC		CALl	DAH			;C -.-.
		CALL	DI
		CALL	DAH
		CALL	DI
		RETURN
;****************************D**************
XXD		CALL	DAH			;D -..
		CALL	DI
		CALL	DI
		RETURN
;**********************E*******************
XXE		CALL	DI			;E .
		RETURN
;**********************F****************
XXF		CALL	DI			;F ..-.
		CALL	DI
		CALL	DAH
		CALL	DI
		RETURN
;*************************G*************
XXG		CALL	DAH			;G --.
		CALL	DAH
		CALL	DI
		RETURN
;***************************H**********
XXH		CALL	DI			;H ....
		CALL	DI
		CALL	DI
		CALL	DI
		RETURN
;**********************I*********
XXI		CALL	DI			;I ..
		CALL	DI
		RETURN
;************************J***************
XXJ		CALL	DI			;J .---
		CALL	DAH
		CALL	DAH
		CALL	DAH
		RETURN
;*************************K***************
XXK		CALL	DAH			;K -.-
		CALL	DI
		CALL	DAH
		RETURN
;************************L***********************
XXL		CALL	DI			;L .-..
		CALL	DAH
		CALL	DI
		CALL	DI
		RETURN
;***********************M*********************
XXM		CALL	DAH			;M --
		CALL	DAH
		RETURN
;***********************N*********************
XXN		CALL	DAH			;N -.
		CALL	DI
		RETURN
;**********************O********************
XXO		CALL	DAH			;O ---
		CALL	DAH
		CALl	DAH
		RETURN
;*********************P***************
XXP		CALL	DI			;P .--.
		CALL	DAH
		CALL	DAH
		CALL	DI
		RETURN
;********************Q**************************
XXQ		CALL	DAH			;Q --.-
		CALL	DAH
		CALL	DI
		CALL	DAH
		RETURN
;******************************R*************
XXR		CALL	DI			;R .-.
		CALL	DAH		
		CALL	DI
		RETURN
;***************************S*************
XXS		CALL	DI			;S ...
		CALL	DI
		CALL	DI
		RETURN
;********************T*********************
XXT		CALL	DAH			;T -
		RETURN
;***********************U***************
XXU		CALL	DI			;U ..-
		CALL	DI
		CALL	DAH
		RETURN
;***********************V**************
XXV		CALL	DI			;V ...-
		CALL	DI
		CALL	DI
		CALL	DAH
		RETURN
;*************************W******************
XXW		CALL	DI			;W .--
		CALL	DAH	
		CALL	DAH
		RETURN
;************************X******************
XXX		CALL	DAH			;X -..-
		CALL	DI
		CALL	DI
		CALL	DAH
		RETURN
;************************Y***************************
XXY		CALL	DAH			;Y -.--
		CALL	DI
		CALL	DAH
		CALL	DAH
		RETURN
;***********************Z********************
XXZ		CALL	DAH			;Z --..
		CALL	DAH
		CALL	DI
		CALL	DI
		RETURN
;************************0*****************
XX0		CALL	DAH			;0 -----
		CALL	DAH
		CALL	DAH
		CALL	DAH
		CALL	DAH
		RETURN
;************************1***********************
XX1		CALL	DI			;1 .----
		CALL	DAH
		CALL	DAH
		CALL	DAH
		CALL	DAH
		RETURN
;***************************2************************
XX2		CALL	DI			;2 ..---
		CALL	DI
		CALL	DAH
		CALL	DAH
		CALL	DAH
		RETURN
;**************************3****************
XX3		CALl	DI			;3 ...--
		CALL	DI
		CALL	DI
		CALL	DAH
		CALL	DAH
		RETURN
;*************************4******************
XX4		CALL	DI			;4 ....-
		CALL	DI
		CALL	DI
		CALL	DI
		CALL	DAH
		RETURN
;***********************5**********************
XX5		CALL	DI			;5 .....
		CALL	DI
		CALL	DI
		CALL	DI
		CALL	DI
		RETURN
;*********************6*****************
XX6		CALL	DAH			;6 -....
		CALL	DI
		CALL	DI
		CALL	DI
		CALL	DI
		RETURN
;*******************7*******************
XX7		CALL	DAH			;7 --...
		CALL	DAH
		CALL	DI
		CALL	DI
		CALL	DI
		RETURN
;***************************8**************
XX8		CALL	DAH			;8 ---..
		CALL	DAH		
		CALL	DAH
		CALL	DI
		CALL	DI
		RETURN
;****************************9***********
XX9		CALL	DAH			;9 ----.
		CALL	DAH
		CALL	DAH
		CALL	DAH
		CALL	DI
		RETURN		
;*************************Initialization: Port GP0 is the output**************************
MAIN
		CALL	0x3FF				; Call up internal calibration
		BSF		STATUS,RP0		    ; hange to Bank 1
		MOVWF	OSCCAL				; set up for RC oscillator
		CLRF	GPIO			    ; Initiate GPIO
		MOVLW	03Dh				; Set  GPIO <5:2,0> to Digital I/O  GP1 is not used
		MOVWF	CMCON			    ; Turn Off Comparator
		CLRF	ANSEL			    ; Turn off Analog Select
		MOVLW	03Ch			    ; GP <5,4,3,2> are the inputs. GP1 is not used 
		MOVWF	TRISIO			    ; GP <0> is the output GP0 = Pin #7
		BCF		STATUS,RP0		    ; Change back to Bank 0
		BCF		GPIO,GP0			; Clears the output so no output at turn on
		GOTO	loop
		

; This initialization is different from the data sheet --it works the data sheet doesn't
;****************************************************************************************888
		
loop	
       
		btfss   GPIO,GP2       	;GP2 ON? GP2 = Pin #5
        call    CQ 	       		;Yes. Call CQ
		btfss	GPIO,GP3	   	;GP3 ON? GP3 = Pin #4
		call	TNX	   			;Yes. Call Tnx
		btfss	GPIO,GP4		;GP4 ON? GP4 = Pin #3
		call	RIG				;Yes. Call Rig	
		btfss	GPIO,GP5		;GP5 ON? GP5 = Pin #2
		call	SEVENTHREE		;Yes. Call 73
        goto    loop       	   	;Retry
		


;*******************************************************

CQ							; CQ CQ CQ DE W6JFR W6JFR K
		

		CALL	THREE
		CALL	XXC			;C
		CALL	TWO
		CALL	XXQ			;Q
		CALL	THREE
		CALL	XXC			;C
		CALL	TWO
		CALL	XXQ			;Q
		CALL	THREE
		CALL	XXC			;C
		CALL	TWO
		CALL	XXQ			;Q
		CALL	THREE
		CALL	XXD			;D	
		CALL	TWO
		CALL	XXE			;E
		CALL 	THREE
		CALL	XXW			;W
		CALL	TWO
		CALL	XX6			;6
		CALL	TWO
		CALL	XXJ			;J
		CALL	TWO
		CALL	XXF			;F
		CALL	TWO
		CALL	XXR			;R
		CALL	TWO
		CALL	THREE
		CALL	XXW			;W
		CALL	TWO
		CALL	XX6			;6
		CALL	TWO
		CALL	XXJ			;J
		CALL	TWO
		CALL	XXF			;F
		CALL	TWO
		CALL	XXR			;R
		CALL	TWO
		CALL	THREE
		CALL	XXK			;K
		CALL	TWO
  		
		RETURN
;************************************************************************************************************	
		
TNX					;TNX OM UR RST IS 599 599, NAME IS PETE PETE, QTH NEAR SEATTLE SEATTLE, WA BACK K
		

		CALL  	THREE
		CALL	XXT		;T -
		CALL	TWO
		CALL	XXN		;N	
		CALL	TWO
		CALL	XXX		;X
		CALL 	THREE
		CALL	XXO		;O
		CALL	TWO
		CALL	XXM		;M
		CALL    THREE
		CALL 	XXU		;U
		CALL	TWO
		CALL	XXR		;R
		CALL    THREE
		CALL	XXR		;R
		CALL	TWO
		CALL	XXS		;S
		CALL	TWO
		CALL	XXT		;T 
		CALL	THREE
		CALL	XXI		;I		
		CALL	TWO
		CALL	XXS		;S
		CALL 	THREE
		CALL	XX5		;5
		CALL	TWO
		CALL	XX9		;9
		CALL	TWO
		CALL	XX9		;9
		CALL	THREE
		CALL	XX5		;5
		CALL	TWO
		CALL	XX9		;9
		CALL	TWO
		CALL	XX9		;9
		CALL	THREE

		
		CALL	XXN			;N
		CALL	TWO
		CALL	XXA			;A
		CALL	TWO
		CALL	XXM			;M
		CALL	TWO
		CALL	XXE			;E
		CALL	THREE
		CALL	XXI			;I
		CALL    TWO
		CALL	XXS			;S
		CALL	THREE
		CALL	XXP			;P
		CALL 	TWO
		CALL	XXE			;E
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXE			;E
		CALL	THREE
		CALL	XXP			;P
		CALL 	TWO
		CALL	XXE			;E
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXE			;E
		CALL	THREE
	
		
		CALL	XXQ			;Q
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXH			;H
		CALL	THREE
		CALL	XXI			;I
		CALL	TWO
		CALL	XXS			;S
		CALL	THREE
		CALL	XXN			;N
		CALL	TWO
		CALL	XXE			;E
		CALL	TWO
		CALL	XXA			;A
		CALL	TWO
		CALL	XXR			;R
		CALL	THREE
		CALL	XXS			;S
		CALL	TWO
		CALL	XXE			;E
		CALL	TWO
		CALL	XXA			;A
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXL			;L
		CALL	TWO
		CALL	XXE			;E
		CALL 	THREE
		CALL	XXS			;S
		CALL	TWO
		CALL	XXE			;E
		CALL	TWO
		CALL	XXA			;A
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXT			;T
		CALL	TWO
		CALL	XXL			;L
		CALL	TWO
		CALL	XXE			;E
		CALL 	THREE
		CALL	COMMA
		CALL	XXW			;W
		CALL	TWO
		CALL	XXA			;A
		CALL	THREE

		CALL	XXB			;BACK
		CALL	TWO
		CALL	XXA
		CALL	TWO
		CALL	XXC
		CALL	TWO
		CALL	XXK

		CALL	THREE

		CALL	XXK			;K
		
		RETURN

;**********************************************************************************************

RIG   						;  Rig is homebrew transceiver 20w Ant is wire beam back K
 	
		CALL	THREE
		CALL	XXR			;RIG
		CALL	TWO
		CALL	XXI
		CALL	TWO
		CALL	XXG
		CALL	THREE

		CALL	XXI			;IS
		CALL	TWO
		CALL	XXS
		CALL	THREE

		CALL	XXH			;HOMEBREW
		CALL	TWO
		CALL	XXO
		CALL	TWO
		CALL	XXM
		CALL	TWO
		CALL	XXE
		CALL	TWO
		CALL	XXB
		CALL	TWO
		CALL	XXR
		CALL	TWO
		CALL	XXE
		CALL	TWO
		CALL	XXW
		CALL	THREE

		CALL	XXX			;XCVR
		CALL	TWO
		CALL	XXC
		CALL	TWO
		CALL	XXV
		CALL	TWO
		CALL	XXR
		CALL	THREE

		CALL	XX2			;20W
		CALL	TWO
		CALL	XX0
		CALL	TWO
		CALL	XXW
		CALL	THREE

		CALL	XXA			;ANT 
		CALL	TWO
		CALL	XXN
		CALL	TWO
		CALL	XXT
		CALL 	THREE

		CALL	XXI			;IS
		CALL	TWO
		CALL	XXS
		CALL	THREE

		CALL	XXA			;A
		CALL	THREE

		CALL	XXW			;WIRE
		CALL	TWO
		CALL	XXI
		CALL	TWO
		CALL	XXR
		CALL	TWO
		CALL	XXE
		CALL	THREE

		CALL	XXB			;BEAM
		CALL	TWO
		CALL	XXE
		CALL	TWO
		CALL	XXA
		CALL	TWO
		CALL	XXM
		CALL	THREE

		CALL	XXB			;BACK
		CALL	TWO
		CALL	XXA
		CALL	TWO
		CALL	XXC
		CALL	TWO
		CALL	XXK
		CALL	THREE

		CALL	XXK			;K over
		CALL    THREE






		RETURN
;***********************************************
 
SEVENTHREE			;TNX OM BEST OF 73s	DE 	W6JFR

		CALL	THREE
		CALL	XXT			;TNX
		CALL	TWO
		CALL	XXN
		CALL	TWO
		CALL	XXX
		CALL	THREE
		CALL	XXO			;OM
		CALL	TWO
		CALL	XXM
		CALL	THREE
		CALL	XXB			;BEST
		CALL	TWO
		CALL	XXE
		CALL	TWO
		CALL	XXS
		CALL	TWO
		CALL	XXT
		CALL	THREE
		CALL	XXO			;OF
		CALL	TWO
		CALL	XXF
		CALL	THREE
		CALL	XX7			;73
		CALL	TWO
		CALL	XX3
		CALL	THREE
		CALL	XXD			;DE
		CALL	TWO
		CALL	XXE
		CALL	THREE
		CALL	XXW			;W6JFR
		CALL	TWO
		CALL	XX6
		CALL	TWO
		CALL	XXJ
		CALL	TWO
		CALL	XXF
		CALL	TWO
		CALL	XXR
		CALL	THREE
		CALL	XXK			;K
		
		
		RETURN
;****************************************************************

;If we are not careful the computer could run this program and have qso's while we are out doing other things Hi!

		End
